package cn.cjxy.controller;

import cn.cjxy.domain.User;
import cn.cjxy.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;
import java.util.List;

/**
 * restful风格请求
 */
@Controller
@RequestMapping("/userRestful")
public class UserControllerRestful {


    @Autowired
    private UserService userService;

    @Autowired
    private HttpSession httpSession;



    /**
     *
     * @param user 传递用户信息
     * @param checkCode 用户输入的验证码
     * @param model 模型 存储用户信息，跳转页面
     * @return
     */
    @RequestMapping("/login")
    public String login(User user, String checkCode, Model model){
        //得到后台生成的验证码
        String sessionCode = (String) httpSession.getAttribute("sessionCode");
        System.out.println(sessionCode);
        //对比验证码
        //如果验证码不对
        if(!checkCode.equals(sessionCode)){//提示用户
            //往model作用域添加提示信息  键是error   ${error}
            model.addAttribute("error","验证码错误！请重新输入！");
            //跳转回登陆页面
            return "forward:/login.jsp";
        }
        //比对用户名和密码
        User dbuser=userService.findByUsername(user.getUsername());
        //dbuser == null 没查到用户，说明用户名错了
        //!dbuser.getPassword().equals(user.getPassword()) 数据库查询记录的密码和前端传进来的密码 不相等，说明密码错误
        if (dbuser == null || !dbuser.getPassword().equals(user.getPassword())){
            //往model作用域添加提示信息  键是error   ${error}
            model.addAttribute("error","用户名或密码错误！");
            //跳转回登陆页面
            return "forward:/login.jsp";
        }
        //验证码和用户名密码都正确，将用户信息存入作用域，在前端显示
        httpSession.setAttribute("loginUser",dbuser);
        return "redirect:/user/list";

    }

    /**
     * 查询用户列表
     * @param model
     * @return
     */
    @GetMapping//http://localhost:8080/userRestful
    public String list(String username,String address,Model model){
        //得到用户列表信息
        List<User> users=userService.findAll(username,address);
        System.out.println(users);
        //将userList集合的信息发送到前端
        model.addAttribute("userList",users);
        return "/list.jsp";
    }

    /**
     * 用户数据回显
     * @param id
     * @param model
     * @return
     */
    //根据id查出当前用户，将查出的用户存入作用域，再跳转到update.jsp  完成数据回显
    @GetMapping("/{id}")////http://localhost:8080/userRestful/2
    public String findById(@PathVariable("id") Integer id, Model model){
        //调用service层传入id得到用户对象
        User user=userService.findUserById(id);
        //将查出的用户存入作用域
        model.addAttribute("user",user);
        //再跳转到update.jsp
        return "/update.jsp";
    }

    /**
     * 修改用户
     * @param user
     * @return
     */
    @PutMapping//http://localhost:8080/userRestful
    public String update(User user){
        //调用修改方法
        userService.update(user);
        //回到list页面
        return "/user/list";
    }

    /**
     * 根据id删除用户
     * @param id
     * @return
     */
    @DeleteMapping("/{id}")//http://localhost:8080/userRestful/2
    public String delete(Integer id){
        //调用修改方法
        userService.delete(id);
        //回到list页面 重新查询一次
        return "/user/list";
    }

    /**
     * 新增用户
     * @param user
     * @return
     */
    @PostMapping//http://localhost:8080/userRestful
    public String save(User user){
        //调用新增方法
        userService.save(user);
        //回到list页面 重新查询一次
        return "/user/list";
    }
}
